package com.design_patterns.singleton;

/**
 * @author: 李德才
 * @description:
 * @create: 2020-08-23 15:14
 **/

/**
 * 饿汉式
 * 类加载到内存后，就实例化一个单例，JVM保证线程安全
 * 简单实用，推荐使用！
 * 唯一缺点：不管用到与否，类装载时就完成实例化
 * Class.forName("")
 * （话说你不用的，你装载它干啥）
 * ---- 解决方法：懒加载
 */
public class StaticFinal {
    /**
     * JVM保证每个Class只会漏到内存一次
     * static修饰符 让Class漏到内存之后马上进行初始化这个变量
     */
    private static final StaticFinal INSTANCE = new StaticFinal();

//    还有一种写法
//    private static final INSTANCE INSTANCE;
//
//    static {
//        INSTANCE = new StaticFinal();
//    }

    /**
     * 让其他方法无法通过 new StaticFinal 获取实例
     */
    private StaticFinal() {}

    public static StaticFinal getInstance() {
        return INSTANCE;
    }

    public static void main(String[] args) {
        StaticFinal m1 = StaticFinal.getInstance();
        StaticFinal m2 = StaticFinal.getInstance();
        System.out.println(m1 == m2);
    }
}
